From 9df3e65391948ef75fcab7bba8da6ee1fb718f21 Mon Sep 17 00:00:00 2001 From: Federico Mena Quintero Date: Sun, 11 Jun 2000 18:18:28 +0000 Subject: [PATCH] It was cold and rainy this Saturday morning, so I needed something to warm 2000-06-10 Federico Mena Quintero * demo/pixbuf-demo.c: It was cold and rainy this Saturday morning, so I needed something to warm my thighs. Running plain infinite loops on your laptop to make it hot is not very much fun. A demo of the gdk-pixbuf scaling functions is way better, and looks prettier, too. * configure.in (AC_OUTPUT): Added the demo Makefile. * Makefile.am (SUBDIRS): Added the demo directory. --- demos/apple-red.png | Bin 0 -> 3545 bytes demos/background.jpg | Bin 0 -> 22219 bytes demos/gnome-applets.png | Bin 0 -> 3090 bytes demos/gnome-calendar.png | Bin 0 -> 2755 bytes demos/gnome-foot.png | Bin 0 -> 2916 bytes demos/gnome-gimp.png | Bin 0 -> 3410 bytes demos/gnome-gmush.png | Bin 0 -> 3244 bytes demos/gnome-gsame.png | Bin 0 -> 4263 bytes demos/gnu-keys.png | Bin 0 -> 3852 bytes demos/pixbuf-demo.c | 228 +++++++++++++++++++++++++++++++++++++++ demos/testpixbuf-scale.c | 40 +++++-- gdk-pixbuf/ChangeLog | 12 +++ 12 files changed, 271 insertions(+), 9 deletions(-) create mode 100644 demos/apple-red.png create mode 100644 demos/background.jpg create mode 100644 demos/gnome-applets.png create mode 100644 demos/gnome-calendar.png create mode 100644 demos/gnome-foot.png create mode 100644 demos/gnome-gimp.png create mode 100644 demos/gnome-gmush.png create mode 100644 demos/gnome-gsame.png create mode 100644 demos/gnu-keys.png create mode 100644 demos/pixbuf-demo.c diff --git a/demos/apple-red.png b/demos/apple-red.png new file mode 100644 index 0000000000000000000000000000000000000000..b0a24e941859564debfe60122d4fb60ab32cacab GIT binary patch literal 3545 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 T!37SN00000NkvXXu0mjf{xHB+ literal 0 HcmV?d00001 diff --git a/demos/background.jpg b/demos/background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..86c006aa466a0c5875a39087c9765b6eb79433be GIT binary patch literal 22219 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 z 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 literal 0 HcmV?d00001 diff --git a/demos/gnome-calendar.png b/demos/gnome-calendar.png new file mode 100644 index 0000000000000000000000000000000000000000..889f329ae5febbc3980ebeb945939f22368d7aab GIT binary patch literal 2755 zcmV;!3Ox0RP)LD)9$o8?N0lDZsHSelm4Ut z5VtU>6Fc<(5`gHyc)iJe;s%E68-cJtCc{Ms4%*Cku?dCr%|LVn;CJ8orcz3ywIWm@ z^*~Wq3WY!j3t;wtRLi=_6S`FX#36w%;vFJk-4|u#xa1t z`rKjRg^JbG7Lm$r<8y}&b(truSicPbVMw4td=+x{*Po+MD3D5}C|)U2uhfxJw!9y- zfB@73)$;n9M3zdFPM$>0ml|FN}Ba7pd#>O|$DRKnB za1ikL7rrE3Jbak`?(T<-@m;_cARXD>Q4aV@p_C$%%y4<~GL@AI?y5_zR-<06Z}7Mb zB#!OG%7}&loCgo!1Pw!-2O9S~Q6AWkd;CeH)5xW6&tr@0GJX6wpV`{2fAr2fzW{Ou zfCiRg zWPw#+&QM5q6oEj6gsL%;V>=DvIi})79yKFPoS8r_eL(L1JV%cnWj` zPXy2Wj0X=r*r1WqqL~aNp66lD&!Z}3RNm@Q_^fEv z!w{v6(Xo;lc`aVkckkQHgp?GgC9gmB7}E0a#AThB%XpjIQi zZ~@PCab1^6p@3YT7wewXz)r)mW#fG}deZ7Z8VEm71WGlNGpZQzr7D&q~o|L$Yi(CjnQ_p`(^lS<6J)gqZgK?dJl4KyT1E1T?7-2h-cz z%ie*#tgWr#q|;b6pXKFc*6bllEd}bpwr$&}t2#aB&r_|}xq9^~ z%2Mpyy_0-k;hsIqbSg!8VS%}o70v?L?kvMY!we1#66gRS1X`nw35l53ZIIZ(|?{?UI&u+T9x=1B$_T9gagP%Rf$j}h=i|2Xx)mN!|9!svvL=a+a z=_bD;&%nR{=~NmK`CW@RAFNmsTQ|#r>!P5AMr*WVJEEcEBu=-}C~86DH$X0%Yep%P z%wXF#N!w=c&|Y%691AD@O5gA>$KQB^U5`A%NA3zUSFY0E+smFkd&uQ-SXRrY3DNYY zXak{dHWTaiWY$`v^u`^ANQ_A-H%JTu1H_b9tu>iUhSk{_db3&PM@N}HcaAe-V;ryh zWV2a@b`3E&Fi5&9O>Mo_qJlug>`|NTPIM9hrL`7;Qhe{3C-ulfkKFEFlKAP5U*YLP z50UThXL@v$CD&zCYnH>1tev1*t1>k^g*CsC(Tz!12&03-*scVfXrU(iltQojigMlO z#Jk6I+gpfgMU%Q(5Nd^EC%CK2VQVVQuHj)ZdFm8PuFF()U4K;d@B^Q)y2d4MovHD& zfNpFYC|2@&xi@_yL1y>deU5yv#3gt*CMCxpg?Iu>ss1Uh>A=SS{irC4P0!UZO) z>w3aTlk|NO2_e#{q_z{5Xe-|WwAL;9N4hs23EfEqG{9T$9?t?jzz$&09JiXqwGAXq zsk38c&IhVr+`oVOo+n1W{n2~xF+MkU`Ilp3?*iL^Uh|%^5o?|?E?Tf$1D4FvF)-uB zfv8SaWZK*q0PAMJx;b_MDPw$ejJ7=zkpqrA`sfQYV`EIt%#@B5i@!1BMG`qQ5_#GP zwJ-v1dc^>f=6XE_M0FB@_?!@xhdQtpGd${1BqAWzQwI;;SD%|3zBD_#^84}e9~Rfv zYG!#DnlUQCq*0oYSo34uGw+i$i+0QS+lfHbYB4WGhQ^~{$ADO085ucTDVO=%l`F50 zmr66n_%1W%s?qo}z=|0&qJ|%%P2IdV>bFfH(FP=F1E*pyv*UfeQkfr{nfb$CCMQn< z+s(SxGM-%ouEun}YD>~~5OMnGmQL$z%Y4Hk-}FRGqu8!JZ56%AxsJWaGJ{3{YHh-+E0(mYrU1+v&sU9c?K5pWvhC;k zwzt>Y^oNSQu>GTiwMo=;tfG`md0a5pR9lY4o7!YcUH!LTXmnd%w0{~3Z}64IjZtC6 zP)Ob6)6>n4ANx15_A#wkc@0c5>RWvD(|p33Xj{+T>cd{g?LQ#Ip01hj#P$FH002ov JPDHLkV1jV$NvHq- literal 0 HcmV?d00001 diff --git a/demos/gnome-foot.png b/demos/gnome-foot.png new file mode 100644 index 0000000000000000000000000000000000000000..04766585175baf1d68a0f1584dc31c1abd3315b8 GIT binary patch literal 2916 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 literal 0 HcmV?d00001 diff --git a/demos/gnome-gsame.png b/demos/gnome-gsame.png new file mode 100644 index 0000000000000000000000000000000000000000..01c061151f69e9e80cdcc29f4190f50dce809fca GIT binary patch literal 4263 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 JPDHLkV1n+!DZT&z literal 0 HcmV?d00001 diff --git a/demos/gnu-keys.png b/demos/gnu-keys.png new file mode 100644 index 0000000000000000000000000000000000000000..58a33770e67e60817ddbd85faeee8534d6f896fe GIT binary patch literal 3852 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 O0000 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include +#include +#include +#include +#include + + + +#define FRAME_DELAY 50 + +#define BACKGROUND_NAME "background.jpg" + +static const char *image_names[] = { + "apple-red.png", + "gnome-applets.png", + "gnome-calendar.png", + "gnome-foot.png", + "gnome-gmush.png", + "gnome-gimp.png", + "gnome-gsame.png", + "gnu-keys.png" +}; + +#define N_IMAGES (sizeof (image_names) / sizeof (image_names[0])) + +/* Current frame */ +static GdkPixbuf *frame; + +/* Background image */ +static GdkPixbuf *background; +int back_width, back_height; + +/* Images */ +static GdkPixbuf *images[N_IMAGES]; + +/* Widgets */ +GtkWidget *da; + + + +/* Loads the images for the demo and returns whether the operation succeeded */ +static gboolean +load_pixbufs (void) +{ + int i; + + background = gdk_pixbuf_new_from_file (BACKGROUND_NAME); + if (!background) + return FALSE; + + back_width = gdk_pixbuf_get_width (background); + back_height = gdk_pixbuf_get_height (background); + + for (i = 0; i < N_IMAGES; i++) { + images[i] = gdk_pixbuf_new_from_file (image_names[i]); + if (!images[i]) + return FALSE; + } + + return TRUE; +} + +/* Expose callback for the drawing area */ +static gint +expose_cb (GtkWidget *widget, GdkEventExpose *event, gpointer data) +{ + guchar *pixels; + int rowstride; + + rowstride = gdk_pixbuf_get_rowstride (frame); + + pixels = gdk_pixbuf_get_pixels (frame) + rowstride * event->area.y + event->area.x * 3; + + gdk_draw_rgb_image_dithalign (widget->window, + widget->style->black_gc, + event->area.x, event->area.y, + event->area.width, event->area.height, + GDK_RGB_DITHER_NORMAL, + pixels, rowstride, + event->area.x, event->area.y); + + return TRUE; +} + +#define CYCLE_LEN 60 + +static int frame_num; + +/* Timeout handler to regenerate the frame */ +static gint +timeout (gpointer data) +{ + double f; + int i; + double xmid, ymid; + double radius; + + gdk_pixbuf_copy_area (background, 0, 0, back_width, back_height, + frame, 0, 0); + + f = (double) (frame_num % CYCLE_LEN) / CYCLE_LEN; + + xmid = back_width / 2.0; + ymid = back_height / 2.0; + + radius = MIN (xmid, ymid) / 2.0; + + for (i = 0; i < N_IMAGES; i++) { + double ang; + int xpos, ypos; + int iw, ih; + double r; + GdkRectangle r1, r2, dest; + double k; + + ang = 2.0 * M_PI * (double) i / N_IMAGES - f * 2.0 * M_PI; + + iw = gdk_pixbuf_get_width (images[i]); + ih = gdk_pixbuf_get_height (images[i]); + + r = radius + (radius / 3.0) * sin (f * 2.0 * M_PI); + + xpos = floor (xmid + r * cos (ang) - iw / 2.0 + 0.5); + ypos = floor (ymid + r * sin (ang) - ih / 2.0 + 0.5); + + k = (i & 1) ? sin (f * 2.0 * M_PI) : cos (f * 2.0 * M_PI); + k = 2.0 * k * k; + k = MAX (0.25, k); + + r1.x = xpos; + r1.y = ypos; + r1.width = iw * k; + r1.height = ih * k; + + r2.x = 0; + r2.y = 0; + r2.width = back_width; + r2.height = back_height; + + if (gdk_rectangle_intersect (&r1, &r2, &dest)) + gdk_pixbuf_composite (images[i], + frame, + dest.x, dest.y, + dest.width, dest.height, + xpos, ypos, + k, k, + GDK_INTERP_NEAREST, + ((i & 1) + ? MAX (127, fabs (255 * sin (f * 2.0 * M_PI))) + : MAX (127, fabs (255 * cos (f * 2.0 * M_PI))))); + } + + gtk_widget_draw (da, NULL); + + frame_num++; + return TRUE; +} + +static guint timeout_id; + +/* Destroy handler for the window */ +static void +destroy_cb (GtkObject *object, gpointer data) +{ + gtk_timeout_remove (timeout_id); + timeout_id = 0; + + gtk_main_quit (); +} + +int +main (int argc, char **argv) +{ + GtkWidget *window; + + gtk_init (&argc, &argv); + gdk_rgb_init (); + + if (!load_pixbufs ()) { + g_message ("main(): Could not load all the pixbufs!"); + exit (EXIT_FAILURE); + } + + frame = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, back_width, back_height); + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_widget_set_usize (window, back_width, back_height); + gtk_window_set_policy (GTK_WINDOW (window), FALSE, FALSE, FALSE); + + gtk_signal_connect (GTK_OBJECT (window), "destroy", + GTK_SIGNAL_FUNC (destroy_cb), NULL); + + da = gtk_drawing_area_new (); + + gtk_signal_connect (GTK_OBJECT (da), "expose_event", + GTK_SIGNAL_FUNC (expose_cb), NULL); + + gtk_container_add (GTK_CONTAINER (window), da); + + timeout_id = gtk_timeout_add (FRAME_DELAY, timeout, NULL); + + gtk_widget_show_all (window); + gtk_main (); + + return 0; +} diff --git a/demos/testpixbuf-scale.c b/demos/testpixbuf-scale.c index a99977fbda..f0059d4ab0 100644 --- a/demos/testpixbuf-scale.c +++ b/demos/testpixbuf-scale.c @@ -29,19 +29,41 @@ gboolean expose_cb (GtkWidget *widget, GdkEventExpose *event, gpointer data) { GdkPixbuf *dest; + GdkGC *gc; + GdkColormap *colormap; + GdkColor color; - gdk_window_set_back_pixmap (widget->window, NULL, FALSE); + color.red = 0xffff; + color.green = 0xffff; + color.blue = 0xffff; - dest = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, event->area.width, event->area.height); + gc = gdk_gc_new (widget->window); + colormap = gdk_window_get_colormap (widget->window); + gdk_colormap_alloc_color (colormap, &color, TRUE, TRUE); + gdk_gc_set_foreground (gc, &color); + gdk_draw_rectangle (widget->window, gc, + TRUE, + event->area.x, + event->area.y, + event->area.width, event->area.height); + + gdk_window_set_back_pixmap (widget->window, NULL, FALSE); - gdk_pixbuf_composite_color (pixbuf, dest, - 0, 0, event->area.width, event->area.height, - -event->area.x, -event->area.y, - (double) widget->allocation.width / gdk_pixbuf_get_width (pixbuf), - (double) widget->allocation.height / gdk_pixbuf_get_height (pixbuf), - interp_type, overall_alpha, - event->area.x, event->area.y, 16, 0xaaaaaa, 0x555555); + dest = gdk_pixbuf_get_from_drawable(NULL, + widget->window, + gdk_window_get_colormap (widget->window), + event->area.x, + event->area.y, + 0, 0, event->area.width, event->area.height); + + gdk_pixbuf_composite (pixbuf, dest, + 0, 0, event->area.width, event->area.height, + -event->area.x, -event->area.y, + (double) widget->allocation.width / gdk_pixbuf_get_width (pixbuf), + (double) widget->allocation.height / gdk_pixbuf_get_height (pixbuf), + interp_type, overall_alpha); + gdk_pixbuf_render_to_drawable (dest, widget->window, widget->style->fg_gc[GTK_STATE_NORMAL], 0, 0, event->area.x, event->area.y, event->area.width, event->area.height, diff --git a/gdk-pixbuf/ChangeLog b/gdk-pixbuf/ChangeLog index ec1014025c..0b0ad0b6af 100644 --- a/gdk-pixbuf/ChangeLog +++ b/gdk-pixbuf/ChangeLog @@ -1,3 +1,15 @@ +2000-06-10 Federico Mena Quintero + + * demo/pixbuf-demo.c: It was cold and rainy this Saturday morning, + so I needed something to warm my thighs. Running plain infinite + loops on your laptop to make it hot is not very much fun. A demo + of the gdk-pixbuf scaling functions is way better, and looks + prettier, too. + + * configure.in (AC_OUTPUT): Added the demo Makefile. + + * Makefile.am (SUBDIRS): Added the demo directory. + 2000-06-09 Larry Ewing * gdk-pixbuf/io-png.c (gdk_pixbuf__png_image_load_increment): -- 2.30.2